#ifndef __FACTORY_H__
#define __FACTORY_H__
#include "head.h"
#include "work_que.h"

typedef struct{
    Que_t que;//队列
    pthread_cond_t cond;//条件变量
    pthread_t *pthid;//存放线程id
    short start_flag;//线程池启动标志，默认为0，启动后，设置为1
}Factory_t;



//线程池初始化
int factory_init(Factory_t *pf,int thread_num,int capacity);
//线程池启动
int factory_start(Factory_t *pf,int thread_num);
//子线程流程
void* thread_handle(void* p);
//是否是ls，cd，pwd，remove,先验证Client_State_t里边是否有token
void simple_command();
//socket,bind,listen
int tcp_init(int* socket_fd,char* ip,char* port);
//服务器端将文件发送给客户端
int download(int new_fd);
//服务器端下载从客户端发送的文件
int upload(int new_fd);
//循环接收数据，直到接收到自己想要数量
int recv_n(int sfd,void* buf,int data_len);
//循环发送数据，直到发送到自己想要数量
int send_n(int sfd,void* buf,int data_len);
//epoll注册
int epoll_add(int epfd,int fd);
//执行对应的命令
int command(Client_State_t* p);
//执行cd进入对应目录
int do_cd(Client_State_t* p);
//执行ls得到该目录下的文件信息发送给客户端
int do_ls(Client_State_t* p);
//执行rm，满足客户端的请求
int do_remove(Client_State_t* p);
//通过getcwd拿到当前路径，并发送给客户端
int do_pwd(Client_State_t* p);
//循环接收数据，能够显示接收数据进度
int recv_n_show(int sfd,void* buf,int data_len);
//传输文件子函数
int tran_file(int new_fd,train_state_t *ct);

#endif